1 /* 2 Copyright: Marcelo S. N. Mancini (Hipreme|MrcSnm), 2018 - 2021 3 License: [https://creativecommons.org/licenses/by/4.0/|CC BY-4.0 License]. 4 Authors: Marcelo S. N. Mancini 5 6 Copyright Marcelo S. N. Mancini 2018 - 2021. 7 Distributed under the CC BY-4.0 License. 8 (See accompanying file LICENSE.txt or copy at 9 https://creativecommons.org/licenses/by/4.0/ 10 */ 11 module hip.hipaudio.audiosource; 12 import hip.hipaudio.audioclip : HipAudioClip; 13 import hip.hipaudio.audio; 14 public import hip.api.audio.audiosource; 15 16 import hip.math.vector; 17 18 /** 19 * Wraps properties for the AudioPlayer. The closest graphical represetantion 20 * to that would be the Material class, but for Audios. 21 * 22 */ 23 public class HipAudioSource : AHipAudioSource 24 { 25 public: 26 //Functions 27 void attachToPosition(){} 28 void attachOnDestroy(){} 29 override float getProgress(){return time/length;} 30 override void pullStreamData(){} 31 override HipAudioBufferWrapper* getFreeBuffer(){return null;} 32 33 final void sendAvailableBuffer(HipAudioBuffer buffer) 34 { 35 (cast(HipAudioClip)clip).setBufferAvailable(buffer); 36 } 37 38 override HipAudioSource clean() 39 { 40 loop = false; 41 isPlaying = false; 42 length = 0; 43 position = [0,0,0]; 44 clip = null; 45 return this; 46 } 47 } 48 49 /** 50 * Unpacks the HipAudioBufferAPI into a HipAudioBuffer. 51 * ClipSize with size different than 0 is used for streamed audio 52 */ 53 HipAudioBuffer getBufferFromAPI(IHipAudioClip clip, size_t clipSize = 0) 54 { 55 import hip.util.memory; 56 if(clipSize == 0) 57 clipSize = clip.getClipSize(); 58 HipAudioBufferAPI* api = clip._getBufferAPI(clip.getClipData(), cast(uint)clipSize); 59 HipAudioBuffer buffer = *cast(HipAudioBuffer*)api; 60 freeGCMemory(api); 61 return buffer; 62 }